package com.tianyuan.lims.utils;


public class AQIUtils {


    public final static String PM25 = "pm25";
    public final static String PM10 = "pm10";
    public final static String SO2  = "so2";
    public final static String CO   = "co";
    public final static String O3   = "o3";
    public final static String NO2  = "no2";




    /**
     * PM10 24小时
     */
    public static int PM10(Integer pm_val) {
        int iaqi1 = 0;
        //-----------------+100，--AQI指数（结合表），-75区间最小值)--，250区间最大值，--每小时AVG（）
        if (pm_val > 0 && pm_val < 51) {
            iaqi1 = cal_linear(0, 50, 0, 50, pm_val);
        }
        if (pm_val >= 51 && pm_val < 151) {
            iaqi1 = cal_linear(50, 100, 50, 150, pm_val);
        }
        if (pm_val >= 151 && pm_val < 251) {
            //AQI=50/40*(103-75)+100  : 135
            //+100，AQI指数（结合表），-75)，250，103
            iaqi1 = cal_linear(100, 150, 150, 250, pm_val);
        }
        if (pm_val >= 251 && pm_val < 351) {
            iaqi1 = cal_linear(150, 200, 250, 350, pm_val);
        }
        if (pm_val >= 351 && pm_val < 421) {
            iaqi1 = cal_linear(200, 300, 350, 420, pm_val);
        }
        if (pm_val >= 421 && pm_val < 501) {
            iaqi1 = cal_linear(300, 400, 420, 500, pm_val);
        }
        if (pm_val >= 501 && pm_val < 601) {
            iaqi1 = cal_linear(400, 500, 500, 600, pm_val);
        }
        return iaqi1;
    }
    /**
     * PM25 24小时
     */
    public static int PM25(Integer pm_val) {
        int iaqi1 = 0;
        //--------------------------+100，--AQI指数（结合表），-75区间最小值)--，250区间最大值，--每小时AVG（）
        if (pm_val >= 0 && pm_val < 36) {
            iaqi1 = cal_linear(0, 50, 0, 35, pm_val);
        }
        if (pm_val >= 36 && pm_val < 76) {
            iaqi1 = cal_linear(50, 100, 35, 75, pm_val);
        }
        if (pm_val >= 76 && pm_val < 116) {
            //AQI=50/40*(103-75)+100  : 135
            //+100，AQI指数（结合表），-75)，116，103
            iaqi1 = cal_linear(100, 150, 75, 115, pm_val);
        }
        if (pm_val >= 116 && pm_val < 151) {
            iaqi1 = cal_linear(150, 200, 115, 150, pm_val);
        }
        if (pm_val >= 151 && pm_val < 251) {
            iaqi1 = cal_linear(200, 300, 150, 250, pm_val);
        }
        if (pm_val >= 251 && pm_val < 351) {
            iaqi1 = cal_linear(300, 400, 250, 350, pm_val);
        }
        if (pm_val >= 351 && pm_val < 501) {
            iaqi1 = cal_linear(400, 500, 350, 500, pm_val);
        }
        return iaqi1;
    }
    /**
     * SO2 24小时
     */
    public static int SO2(Integer pm_val) {
        int iaqi1 = 0;
        //AQI=50/40*(103-75)+100  : 135
        //+100，AQI指数（结合表），-75)，250，103
        //--------------------------+100，--AQI指数（结合表），-0区间最小值)--，40区间最大值，--每小时AVG（）
        if (pm_val > 0 && pm_val < 51) {
            iaqi1 = cal_linear(0, 50, 0, 50, pm_val);
        }
        if (pm_val >= 51 && pm_val < 151) {
            iaqi1 = cal_linear(50, 100, 50, 150, pm_val);
        }
        if (pm_val >= 151 && pm_val < 476) {
            iaqi1 = cal_linear(100, 150, 150, 475, pm_val);
        }
        if (pm_val >= 476 && pm_val < 801) {
            iaqi1 = cal_linear(150, 200, 475, 800, pm_val);
        }
        if (pm_val >= 801 && pm_val < 1601) {
            iaqi1 = cal_linear(200, 300, 800, 1600, pm_val);
        }
        if (pm_val >= 1601 && pm_val < 2101) {
            iaqi1 = cal_linear(300, 400, 1600, 2100, pm_val);
        }
        if (pm_val >= 2101 && pm_val < 2621) {
            iaqi1 = cal_linear(400, 500, 2101, 2620, pm_val);
        }
        return iaqi1;
    }
    /**
     * No2 24小时
     */
    public static int No2(Integer pm_val) {
        int iaqi1 = 0;
        //AQI=50/40*(103-75)+100  : 135
        //+100，AQI指数（结合表），-75)，250，103
        //--------------------------+100，--AQI指数（结合表），-0区间最小值)--，40区间最大值，--每小时AVG（）
        if (pm_val > 0 && pm_val < 41) {
            iaqi1 = cal_linear(0, 50, 0, 40, pm_val);
        }
        if (pm_val >= 41 && pm_val < 81) {
            iaqi1 = cal_linear(50, 100, 40, 80, pm_val);
        }
        if (pm_val >= 81 && pm_val < 181) {
            iaqi1 = cal_linear(100, 150, 80, 180, pm_val);
        }
        if (pm_val >= 181 && pm_val < 281) {
            iaqi1 = cal_linear(150, 200, 180, 280, pm_val);
        }
        if (pm_val >= 281 && pm_val < 566) {
            iaqi1 = cal_linear(200, 300, 280, 565, pm_val);
        }
        if (pm_val >= 566 && pm_val < 751) {
            iaqi1 = cal_linear(300, 400, 565, 750, pm_val);
        }
        if (pm_val >= 751 && pm_val < 941) {
            iaqi1 = cal_linear(400, 500, 750, 940, pm_val);
        }
        return iaqi1;
    }
    /**
     * CO 24小时
     */
    public static int CO1(Integer pm_val) {
        int iaqi1 = 0;
        //AQI=50/40*(103-75)+100  : 135
        //+100，AQI指数（结合表），-75)，250，103
        //--------------------------+100，--AQI指数（结合表），-0区间最小值)--，40区间最大值，--每小时AVG（）
        if (pm_val > 0 && pm_val < 3) {
            iaqi1 = cal_linear(0, 50, 0, 2, pm_val);
        }
        if (pm_val >= 3 && pm_val < 5) {
            iaqi1 = cal_linear(50, 100, 3, 4, pm_val);
        }
        if (pm_val >= 5 && pm_val < 15) {
            iaqi1 = cal_linear(100, 150, 4, 14, pm_val);
        }
        if (pm_val >= 15 && pm_val < 25) {
            iaqi1 = cal_linear(150, 200, 14, 24, pm_val);
        }
        if (pm_val >= 25 && pm_val < 37) {
            iaqi1 = cal_linear(200, 300, 24, 36, pm_val);
        }
        if (pm_val >= 37 && pm_val < 49) {
            iaqi1 = cal_linear(300, 400, 36, 48, pm_val);
        }
        if (pm_val >= 49 && pm_val < 61) {
            iaqi1 = cal_linear(400, 500, 48, 60, pm_val);
        }
        return iaqi1;
    }
    /**
     * O3 24小时
     */
    public static int O3(Integer pm_val) {
        int iaqi1 = 0;
        //AQI=50/40*(103-75)+100  : 135
        //+100，AQI指数（结合表），-75)，250，103
        //--------------------------+100，--AQI指数（结合表），-0区间最小值)--，40区间最大值，--每小时AVG（）
        if (pm_val > 0 && pm_val < 161) {
            iaqi1 = cal_linear(0, 50, 0, 160, pm_val);
        }
        if (pm_val >= 161 && pm_val < 201) {
            iaqi1 = cal_linear(50, 100, 160, 200, pm_val);
        }
        if (pm_val >= 201 && pm_val < 301) {
            iaqi1 = cal_linear(100, 150, 200, 300, pm_val);
        }
        if (pm_val >= 301 && pm_val < 401) {
            iaqi1 = cal_linear(150, 200, 300, 400, pm_val);
        }
        if (pm_val >= 401 && pm_val < 801) {
            iaqi1 = cal_linear(200, 300, 400, 800, pm_val);
        }
        if (pm_val >= 801 && pm_val < 1001) {
            iaqi1 = cal_linear(300, 400, 800, 1000, pm_val);
        }
        if (pm_val >= 1001 && pm_val < 1201) {
            iaqi1 = cal_linear(400, 500, 1000, 1200, pm_val);
        }
        return iaqi1;
    }
    /**
     * AQI=50/40*(103-75)+100  : 135
     *
     * @param iaqi_lo +100
     * @param iaqi_hi AQI指数
     * @param bp_lo   -75)
     * @param bp_hi   区间最高值 115
     * @param pm_val  (103
     * @return iaqi1---135
     */
    private static int cal_linear(int iaqi_lo, int iaqi_hi, int bp_lo, int bp_hi, Integer pm_val) {
        int iaqi1 = 0;
        iaqi1 = (iaqi_hi - iaqi_lo) * (pm_val - bp_lo) / (bp_hi - bp_lo) + iaqi_lo;
        return iaqi1;
    }
    /**
     * 获取aqi类型
     *
     * @param aqiAVg
     * @return int
     */
    public static int getATypeByInt(final int aqiAVg) {
        /**
         * 0－50：优 1
         * 51－100：良 2
         * 101－150：轻度污染 3
         * 151－200：中度污染 4
         * 201－300：重度污染 5
         * >300：严重污染 6
         */
        if (aqiAVg >= 0 && aqiAVg < 51) {
            return 1;
        } else if (aqiAVg >= 51 && aqiAVg < 101) {
            return 2;
        } else if (aqiAVg >= 101 && aqiAVg < 151) {
            return 3;
        } else if (aqiAVg >= 151 && aqiAVg < 201) {
            return 4;
        } else if (aqiAVg >= 201 && aqiAVg < 301) {
            return 5;
        } else {
            return 6;
        }
    }

    /**
     * 根据int获取aqiString名称
     *
     * @param aqiAVg
     * @return int
     */
    public static String getATypeByStr(final int aqiAVg) {
        /**
         * 0－50：优 1
         * 51－100：良 2
         * 101－150：轻度污染 3
         * 151－200：中度污染 4
         * 201－300：重度污染 5
         * >300：严重污染 6
         */
        if (aqiAVg == 1) {
            return "优";
        } else if (aqiAVg == 2) {
            return "良";
        } else if (aqiAVg == 3) {
            return "轻度污染";
        } else if (aqiAVg == 4) {
            return "中度污染";
        } else if (aqiAVg == 5) {
            return "重度污染";
        } else {
            return "严重污染";
        }
    }
}


